[初心者向け]AWS Certificate Managerを使用してインターネットからELBへの通信をHTTPS化してみた
CX事業本部 IoT事業部のアベシです
前回のエントリで無料のドメインを使ってEC2にアクセスできる構成を作りました。 今回はELBとAWS Certificate Manager(以後ACM)を使ってインターネットからの通信をHTTPSにしてみました。
概要
ACMの機能で発行したSSL証明書をELBに適応することでインターネットからELBまでのトラフィックをHTTPS通信にできます。 HTTPS通信はSSL/TLSプロトコルにより暗号化されたhttp通信です。通信を暗号化することで個人情報など秘匿性が求められる情報の盗聴や改ざんを防ぐことに役立ちます。 前回はパブリックサブネットに設置していたEC2をプライベートサブネットに配置してELBからのトラフィックのみ許可する形にします。 前回との構成の比較は以下の通りです。
準備
ELBの構築などの前に、前回エントリ時の構成を以下のように変更します。
- EC2にアタッチしていたElastiIPを外す。
- プライベートサブネットを作り、EC2の設置先をこのサブネットに変更する。
- ELBの設定には2つ以上のサブネットが必要になりますので、上記のプライベートサブネットとは別にもう一つサブネットを作成します。
- ELB用のセキュリティグループを作成。インバウンドルールはHTTPS通信を許可する設定にしてください。
ACMでSSL証明書を取得
ACMのトップページ行き、証明書をリクエスト
を押下
パブリック証明書をリクエストにチェック入った状態で次に進みます。
SSL証明書で保護するドメイン名
を記載、検証方法にDNS検証
を選択してリクエスト
を押下。
Route53でDNSレコードを管理していれば、DNS検証を実行した際に自動的に検証用のCNAMEレコードが追加されて検証されます。また証明書の自動更新機能もあります。 今回の場合数秒で検証完了しました。
Route53のドメインのページを見てみると以下のように、ACMのDNS検証によって作られたCNAMEがレコードに追加されています。
ELBの作成
先ずはターゲットグループを作成
ターゲットグループでELBからの通信をどこに向けるかを定義します。今回の場合は先程プライベートサブネットに設置したEC2となります。 EC2のページの左ペインの中に有るターゲットグループのボタンから設定ページを開きます。 ターゲットタイプをインスタンスに指定。ELBからの通信はHTTP通信で受けことになるので80番ポートを開ける設定にします。VPCを指定したらほかは特にいじらずに次に進みます。
ターゲットとして向けるEC2インスタンスにチェックを入れ、保留中として以下を含める
を押下
すると、下段のターゲットを確認に選択したEC2インスタンスが表示されます。この状態でターゲットグループの作成ボタン
を押下して作成します。
ELBの作成
今回作成するロードバランサーの種類はApplication Load Balancer(ALB)となります。選択して設定を始めます。
次のページで全ての設定を入力し作成します。 ロードバランサーの名前を入力します。
VPCとサブネットを指定します。ALBを作成するには2つ以上のサブネットを指定する必要があります。
リスナーの設定をします。ALBまでの通信をHTTPSで受けるため、443ポートを指定します。先程作成したターゲットグループを指定します。先程取得したSSL証明書を指定。ここまで入力できましたら一番下の作成ボタンを押してALBを作成してください。
Route53でレコードの設定
ドメインをALBに向けるためにエイリアスレコードを作成します。
右上のエイリアス
と書いてあるスイッチをクリックすると、その下のプルダウンメニューからALBを選択できます。
AZとALBを指定します。その後右下のボタンを押してレコードを作成してください。
以下のようにALBに向けたレコードが作成されました。
EC2のセキュリティグループを変更
EC2のセキュリティグループの設定を変更して、ALBからのトラフィックのみを許可するようにします。
以上で全ての構築、設定が完了です。
通信の確認
ドメインにアクセスすると想定した通り、EC2に置いたWebサイトにHTTPS通信できました。またドメインにSSL証明書がアタッチされている事も確認できました。
あとがき
ACMで発行したSSL証明書を使ってELBへの通信をHTTPS化してみました! ACMを使えば無料でSSL証明書を取得でき、なおかつDNS検証すれば自動で証明書を更新してくれるということで、色々とありがたいサービスですね〜。